/*
 * Pruebas unitarias para la clase StackVector utilizando strings como
 * tipos de datos a guardar.
 * 
 * Autor: Jorge Luis Martínez
 * Fecha: 16/jul/2012
 */
package Parser;

import Interprete.InterpretePosfix;
import java.text.ParseException;
import org.junit.*;
import static org.junit.Assert.*;

/**
 * 
 * @author Jorge Luis Martínez
 */
public class InterpretePosfixTest {
    
    /**
     * Prueba si el intérprete funciona bien con una expresión sencilla.
     */
    @Test
    public void testEvaluar_SimpleBien() throws ParseException{
        System.out.println("evaluar (simple + bien)");
        String expresion = "3 5 + 2 -";
        
        
        InterpretePosfix instance = new InterpretePosfix();
        double expResult = 6.0;
        double result = instance.evaluar(expresion);
        
        assertEquals(expResult, result, 0.0);
    }
    
    /**
     * Prueba el fallo de una expresión sencilla.
     * @throws ParseException 
     */
    @Test(expected=ParseException.class)
    public void testEvaluar_SimpleMal() throws ParseException{
        System.out.println("evaluar (simple + mal)");
        String expresion = "4 + 5";
        InterpretePosfix instance = new InterpretePosfix();
        
        double expResult = 9.0;
        double result = instance.evaluar(expresion);
        
        assertEquals(expResult, result, 0.0);
    }
    
    /**
     * Prueba si una expresión compleja se evalúa de manera correcta.
     * @throws ParseException 
     */
    @Test
    public void testEvaluar_ComplejaBien() throws ParseException{
        System.out.println("evaluar (compleja + bien)");
        String expresion = "1.0 2.0 + 4.0 * 3.0 + 5.0 / 2.0 -";
        
        InterpretePosfix instance = new InterpretePosfix();
        double expResult = 1.0;
        double result = instance.evaluar(expresion);
        
        assertEquals(expResult, result, 0.0);
    }
    
    /**
     * Evalua que una expresión compleja incorrecta produzca un error.
     * @throws ParseException 
     */
    @Test(expected=ParseException.class)
    public void testEvaluar_ComplejaMal() throws ParseException{
        System.out.println("evaluar (compleja + mal)");
        String expresion = "1.0 2.0 + 4.0 * 3.0 + 5.0 / 2.0 - 0.0 /";
        InterpretePosfix instance = new InterpretePosfix();
        
        double expResult = 1.0;
        double result = instance.evaluar(expresion);
        
        assertEquals(expResult, result, 0.0);
    }
}
